#ifndef _OBJECT_H_
#define _OBJECT_H_
/* camus alpha one old stuff
typedef struct value{
	int type;
	char * word;
	int i;
	double d;
	
	struct value * car;
	struct value * cdr;
}VALUE;

#define TYPE_CHAR      1
#define TYPE_INTEIRO   2
#define TYPE_DOUBLE    3
#define TYPE_WORD      4
#define TYPE_CONS      5
#define TYPE_STRING    6

#define MAX_LIST_WORD 128
#define MAX_STRING_SIZE 1024

VALUE * NewInt (int i);
VALUE * NewDouble(double d);
VALUE * NewList(void * list);
VALUE * NewWord(char * word);
VALUE * NewString(char * string);
VALUE * NewChar(char a);
void    DeleteValue(VALUE * value);
VALUE * Car(VALUE * cons);
VALUE * Cdr(VALUE * cons);
VALUE * nth(int i, VALUE * cons);
VALUE * Cons(VALUE * car, VALUE * cdr);
int ListLength (VALUE * cons);
VALUE * nthConsCell(int i, VALUE * cons);
VALUE * Cast (int to, VALUE * object);
*/

#define CFCONS_ID_VALUE       0
#define CFSYMBOL_ID_VALUE     1
#define CFINTEGER_ID_VALUE    2
#define CFFLOAT_ID_VALUE      3
#define CFVECTOR_ID_VALUE     4
#define CFCHARACTER_ID_VALUE  5
/* #define CFSTRELEMENT_ID_VALUE 6 */
#define CFSTRING_ID_VALUE     6

#define NTYPES 7
#define PAGESIZE  128  /* TODO: MUST CHANGE THIS TO A PROPER PAGESIZE */

typedef struct XCons{
  char type;
  void * car;
  void * cdr;
} CFCons;

typedef struct XSymbol {
  char type;
  char * string;
} CFSymbol;

typedef struct XInteger {
  char type;
  int number;
} CFInteger;

typedef struct XFloat {
  char type;
  double number;
} CFDouble;

typedef struct XVector {
  char type;
  int size;
  void * cells;
} CFVector;

typedef struct XCharacter {
  char type;
  char character;
} CFCharacter;

typedef struct XStrElement {
  int length;
  char * string;
} CFStrElement;

typedef struct XString {
  char type;
  CFStrElement * strBody;
} CFString;
/* garbae collector construction terminated by the board */
/*typedef struct 

typedef struct XPage {
  struct Xpage * nextpage;
  void * 
}*/
#endif /*_OBJECT_H_*/
